﻿

var fixedX = -1;
var fixedY = -1;
var startAt = 1;
var showWeekNumber = 0;
var showToday = 1;
var imgDir = "./images/";

var strGoToCurrentMonth = "Go To Current Month";
var strTodayIs = "Today Is";
var strWeek    = "Wk";
var strScrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically.";
var strScrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically.";
var strSelectMonthMessage = "Click to select a month.";
var strSelectYearMessage = "Click to select a year.";
var strSelectDateMessage = "Select [date] as date.";

var gotoString = "Go To Current Month";
var todayString = "今天是";
var weekString = "Wk";
var scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically.";
var scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically.";
var selectMonthMessage = "Click to select a month.";
var selectYearMessage = "Click to select a year.";
var selectDateMessage = "Select [date] as date.";

var crossobj;
var crossMonthObj;
var crossYearObj;
var monthSelected;
var yearSelected;
var dateSelected;
var omonthSelected;
var oyearSelected;
var odateSelected;
var monthConstructed;
var yearConstructed;
var intervalID1;
var intervalID2;
var timeoutID1;
var timeoutID2;
var ctlToPlaceValue;
var ctlNow;
var dateFormat;
var nStartingYear;

var bPageLoaded=false;
var ie=document.all;
var dom=document.getElementById;

var ns4=document.layers;
var today = new Date();
var dateNow = today.getDate();
var monthNow = today.getMonth();
var yearNow = today.getYear();
var imgsrc = new Array();
imgsrc[0]="drop1.gif";
imgsrc[1]="drop2.gif";
imgsrc[2]="left1.gif";
imgsrc[3]="left2.gif";
imgsrc[4]="right1.gif";
imgsrc[5]="right2.gif";
imgsrc[6]="close.gif";

var img = new Array();

var stackCalHid = new Array();
var stackMonthHid = new Array();

var bShow = false;

/* hides objects (for IE only) */
function hideElement( elmID, overDiv, stack )
{
	     var intMSIEStart = parseInt(navigator.appVersion.indexOf("MSIE")) + 5;
	     var IntMSIEEnd = parseInt(navigator.appVersion.indexOf("MSIE")) + 6;
	     var IntIEVersion = navigator.appVersion.substring(intMSIEStart,IntMSIEEnd);

if(IntIEVersion == 5)
{
	alert("please upgrade your IE to version 6.0 for better use calendar!");
}
else
{
  if( ie )
  {
    for( i = 0; i < document.all.tags( elmID ).length; i++ )
    {
      obj = document.all.tags( elmID )[i];
      if( !obj || !obj.offsetParent )
      {
        continue;
      }

      objLeft   = obj.offsetLeft;
      objTop    = obj.offsetTop;
//      objParent = obj.offsetParent;

//      while( objParent.tagName.toUpperCase() != "BODY" )
//      {
//        objLeft  += objParent.offsetLeft;
//        objTop   += objParent.offsetTop;
//        objParent = objParent.offsetParent;
//      }

      objHeight = obj.offsetHeight;
      objWidth = obj.offsetWidth;

      if((overDiv.offsetLeft+overDiv.offsetWidth)<=objLeft);
      else if((overDiv.offsetTop+overDiv.offsetHeight)<=objTop);
      else if(overDiv.offsetTop>=(objTop+objHeight));
      else if(overDiv.offsetLeft>=(objLeft+objWidth));
      else
      {
			if( obj.style.visibility != "hidden" ){
				stack.push(obj);
				obj.style.visibility = "hidden";
			}
      }
    }
  }

}


}

/*
* unhides objects (for IE only)
*/
function showElement( stack )
{
 var intMSIEStart = parseInt(navigator.appVersion.indexOf("MSIE")) + 5;
var IntMSIEEnd = parseInt(navigator.appVersion.indexOf("MSIE")) + 6;
var IntIEVersion = navigator.appVersion.substring(intMSIEStart,IntMSIEEnd);

if(IntIEVersion == 5)
{
	
}
else
{


	//comment by allen for use in ie5.0
	if( ie )
	{
		var obj = stack.pop();
		while(obj){
			obj.style.visibility = "";
			obj = stack.pop();
		}
	}
}

}

function HolidayRec (d, m, y, desc)
{
    this.d = d;
    this.m = m;
    this.y = y;
    this.desc = desc;
}

var HolidaysCounter = 0;
var Holidays = new Array();

function addHoliday (d, m, y, desc)
{
    Holidays[HolidaysCounter++]=new HolidayRec(d,m,y,desc);
}

if (dom)
{
    for    (i=0;i<imgsrc.length;i++)
    {
        img[i] = new Image;
        img[i].src = imgDir + imgsrc[i];
    }
    //controls style of whole table
    document.write("\n<div onclick='bShow=true' id='calendar' ");
    document.write("style='z-index:999;position:absolute;visibility:hidden;'>");
    document.write("\n<table width="+((showWeekNumber==1)?250:220));
    document.write(" style='font-family:arial;font-size:11px;border-width:1;");
    document.write(" border-style:solid;border-color:#a0a0a0;font-family:arial;");
    document.write(" font-size:11px}' bgcolor='#ffffff'>");
    document.write("\n<tr bgcolor='#0000aa'>");
    document.write("\n<td>");
    document.write("\n<table width='"+((showWeekNumber==1)?248:218)+"'>");
    document.write("\n<tr>");
    document.write("\n<td style='padding:2px;font-family:arial;font-size:11px;'>");
    document.write("\n<font color='#ffffff'><B><span id='caption'></span>");
    document.write("</B></font></td>");
    document.write("\n<td align=right>");
    document.write("\n<a href='javascript:hideCalendar()'>");
    document.write("\n<IMG SRC='"+imgDir+"close.gif' WIDTH='15' HEIGHT='13' ");
    document.write("BORDER='0' ALT='Close the Calendar'></a></td>");
    document.write("\n</tr>");
    document.write("\n</table></td>");
    document.write("\n</tr>");
    document.write("\n<tr>");
    document.write("\n<td style='padding:5px' bgcolor=#ffffff>");
    document.write("\n<span id='content'></span></td>");
    document.write("\n</tr>");

    if (showToday==1)
    {
        document.write("\n<tr bgcolor=#cccccc>");
        document.write("\n<td style='padding:5px' align=center>");
        document.write("\n<span id='lblToday'></span></td>");
        document.write("\n</tr>");
    }

    document.write("\n</table></div>");
    document.write("\n<div id='selectMonth' ");
    document.write("style='z-index:1999;");
    document.write("position:absolute;visibility:hidden;'>");
    document.write("</div><div id='selectYear' ");
    document.write("style='z-index:999;");
    document.write("position:absolute;visibility:hidden;'></div>");
}

var monthName = new Array()
//monthName[0]="January";
//monthName[1]="February";
//monthName[2]="March";
//monthName[3]="April";
//monthName[4]="May";
//monthName[5]="June";
//monthName[6]="July";
//monthName[7]="August";
//monthName[8]="September";
//monthName[9]="October";
//monthName[10]="November";
//monthName[11]="December";

monthName[0]="1月";
monthName[1]="2月";
monthName[2]="3月";
monthName[3]="4月";
monthName[4]="5月";
monthName[5]="6月";
monthName[6]="7月";
monthName[7]="8月";
monthName[8]="9月";
monthName[9]="10月";
monthName[10]="11月";
monthName[11]="12月";


dayName = new Array()
dayName[0]="日";
dayName[1]="一";
dayName[2]="二";
dayName[3]="三";
dayName[4]="四";
dayName[5]="五";
dayName[6]="六";

//dayName[0]="Sun";
//dayName[1]="Mon";
//dayName[2]="Tue";
//dayName[3]="Wed";
//dayName[4]="Thu";
//dayName[5]="Fri";
//dayName[6]="Sat";

if (startAt!=1)
{
    for(i=0; i<6; i++)
    {
        dayName[i]=dayName[i+1]
    }
    dayName[6]="Sun";

}

//This is the style info for the physical date numbers
var styleAnchor="text-decoration:none;color:black;cursor:hand;font-size:11px;";

var styleLightBorder="border-style:solid;border-width:1px;border-color:#0000aa;";
styleLightBorder+="background-color:#FFFFFF;color:#0000aa;font-weight:bolder;"

function swapImage(srcImg, destImg){
    if (ie)    { document.getElementById(srcImg).setAttribute("src",imgDir + destImg) }
}

function init()    {
    if (!ns4)
    {
        if (!ie) {
            yearNow += 1900;
        }

        if(dom){
            crossobj=document.getElementById("calendar").style
            hideCalendar();
            crossMonthObj=document.getElementById("selectMonth").style
            crossYearObj=document.getElementById("selectYear").style
        } else {
            crossobj=(ie? document.all.calendar : document.calendar)
            hideCalendar();
            crossMonthObj=(ie? document.all.selectMonth : document.selectMonth)
            crossYearObj=(ie? document.all.selectYear : document.selectYear);
        }

        monthConstructed=false;
        yearConstructed=false;

        //This controls the Today is portion
        if (showToday==1)
        {
            var lblToday = document.getElementById("lblToday");
            var lblTodayString = "";
            lblTodayString=" <a onmousemove='window.status=\""+gotoString+"\"' ";
            lblTodayString+="onmouseout='window.status=\"\"' ";
            lblTodayString+="title='"+gotoString+"' style='"+styleAnchor+"' ";
            lblTodayString+="href='javascript:monthSelected=monthNow;";
            lblTodayString+="yearSelected=yearNow;constructCalendar();'>";
            lblTodayString+=todayString+" 星期";
            lblTodayString+=dayName[(today.getDay()-startAt==-1)?6:(today.getDay())];
            lblTodayString+=", " + monthName[monthNow].substring(0,3)/* + " "*/;
            lblTodayString+=dateNow + "日, " +    yearNow    + "年"+ "</a>";
            lblToday.innerHTML=lblTodayString;
        }

        //This is for the color control on the top table
        sHTML1="<span id='spanLeft'    style='border-style:solid;border-width:1;";
        sHTML1+="border-color:#3366FF;cursor:hand' ";
        sHTML1+="onmouseover='swapImage(\"changeLeft\",\"left2.gif\");";
        sHTML1+="this.style.borderColor=\"#88AAFF\";";
        sHTML1+="window.status=\""+scrollLeftMessage+"\"' ";
        sHTML1+="onclick='javascript:decMonth()' ";
        sHTML1+="onmouseout='clearInterval(intervalID1);";
        sHTML1+="swapImage(\"changeLeft\",\"left1.gif\");";
        sHTML1+="this.style.borderColor=\"#3366FF\";";
        sHTML1+="window.status=\"\"' ";
        sHTML1+="onmousedown='clearTimeout(timeoutID1);";
        sHTML1+="timeoutID1=setTimeout(\"StartDecMonth()\",500)'";
        sHTML1+="onmouseup='clearTimeout(timeoutID1);";
        sHTML1+="clearInterval(intervalID1)'>";
        sHTML1+="&nbsp<IMG id='changeLeft' SRC='"+imgDir+"left1.gif' ";
        sHTML1+="width=10 height=11 BORDER=0>&nbsp</span>&nbsp;";

        // After meeting
        sHTML1+="<span id='spanRight' style='border-style:solid;border-width:1;";
        sHTML1+="border-color:#3366FF;cursor:hand' ";
        sHTML1+="onmouseover='swapImage(\"changeRight\",\"right2.gif\");";
        sHTML1+="this.style.borderColor=\"#88AAFF\";";
        sHTML1+="window.status=\""+scrollRightMessage+"\"'";
        sHTML1+="onmouseout='clearInterval(intervalID1);";
        sHTML1+="swapImage(\"changeRight\",\"right1.gif\");";
        sHTML1+="this.style.borderColor=\"#3366FF\";window.status=\"\"' ";
        sHTML1+="onclick='incMonth()' onmousedown='clearTimeout(timeoutID1);";
        sHTML1+="timeoutID1=setTimeout(\"StartIncMonth()\",500)' ";
        sHTML1+="onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>";
        sHTML1+="&nbsp<IMG id='changeRight' ";
        sHTML1+="SRC='"+imgDir+"right1.gif' width=10 height=11 BORDER=0>&nbsp</span>";
        sHTML1+="&nbsp";

        sHTML1+="<span id='spanMonth' style='border-style:solid;border-width:1;";
        sHTML1+="border-color:#3366FF;cursor:hand' ";
        sHTML1+="onmouseover='swapImage(\"changeMonth\",\"drop2.gif\");";
        sHTML1+="this.style.borderColor=\"#88AAFF\";";
        sHTML1+="window.status=\""+selectMonthMessage+"\"' ";
        sHTML1+="onmouseout='swapImage(\"changeMonth\",\"drop1.gif\");";
        sHTML1+="this.style.borderColor=\"#3366FF\";window.status=\"\"' ";
        sHTML1+="onclick='popUpMonth()'></span>&nbsp;";


        sHTML1+="<span id='spanYear' style='border-style:solid;border-width:1;";
        sHTML1+="border-color:#3366FF;cursor:hand' ";
        sHTML1+="onmouseover='swapImage(\"changeYear\",\"drop2.gif\");";
        sHTML1+="this.style.borderColor=\"#88AAFF\";";
        sHTML1+="window.status=\""+selectYearMessage+"\"' ";
        sHTML1+="onmouseout='swapImage(\"changeYear\",\"drop1.gif\");";
        sHTML1+="this.style.borderColor=\"#3366FF\";window.status=\"\"'    ";
        sHTML1+="onclick='popUpYear()'></span>&nbsp;";

        document.getElementById("caption").innerHTML = sHTML1;

        bPageLoaded=true
    }
}

function hideCalendar()    {

	if( crossobj.visibility=="hidden" )
		return;
	
		popDownMonth();
		
    crossobj.visibility="hidden";

    if (crossMonthObj != null) {
        crossMonthObj.visibility="hidden";
    }

    if (crossYearObj !=    null) {
        crossYearObj.visibility="hidden";
    }

    showElement( stackCalHid );

}

function padZero(num) {
    return ((num < 10)? '0' + num : num);
}

function constructDate(d,m,y)
{
    sTmp = dateFormat
    sTmp = sTmp.replace    ("dd","<e>");
    sTmp = sTmp.replace    ("d","<d>");
    sTmp = sTmp.replace    ("<e>",padZero(d));
    sTmp = sTmp.replace    ("<d>",d);
    sTmp = sTmp.replace    ("mmm","<o>");
    sTmp = sTmp.replace    ("mm","<n>");
    sTmp = sTmp.replace    ("m","<m>");
    sTmp = sTmp.replace    ("<m>",m+1);
    sTmp = sTmp.replace    ("<n>",padZero(m+1));
    sTmp = sTmp.replace    ("<o>",monthName[m]);
    return sTmp.replace ("yyyy",y);
}

function closeCalendar() {
    var sTmp;

    hideCalendar();
    ctlToPlaceValue.value = constructDate(dateSelected,monthSelected,yearSelected);
}

/*** Month Pulldown    ***/

function StartDecMonth()
{
    intervalID1=setInterval("decMonth()",80);
}

function StartIncMonth()
{
    intervalID1=setInterval("incMonth()",80);
}

function incMonth () {
    monthSelected++
    if (monthSelected>11) {
        monthSelected=0;
        yearSelected++;
    }
    constructCalendar();
}

function decMonth () {
    monthSelected--
    if (monthSelected<0) {
        monthSelected=11;
        yearSelected--;
    }
    constructCalendar();
}

function constructMonth() {
    popDownYear()

    if (!monthConstructed) {
        var sHTML = "";
        var sHTML1 = "";

        for (i=0; i<12; i++) {

            sName = monthName[i];

            if (i==monthSelected){
                sName = "<B>" + sName + "</B>"
            }

            sHTML+="<tr><td id='m" + i + "' ";
            sHTML+="onmouseover='this.style.backgroundColor=\"#BBCEFF\"' ";
            sHTML+="onmouseout='this.style.backgroundColor=\"\"' ";
            sHTML+="style='cursor:pointer' ";
            sHTML+="onclick='monthConstructed=false;";
            sHTML+="monthSelected=" + i + ";constructCalendar();";
            sHTML+="popDownMonth();event.cancelBubble=true'>";
            sHTML+="&nbsp;" + sName + "&nbsp;</td></tr>\n";
        }

        sHTML1="<table width=70 style='font-family:arial; font-size:11px; ";
        sHTML1+="border-width:1; border-style:solid; border-color:#a0a0a0; ";
        sHTML1+="cursor: hand;' bgcolor='#FFFFDD' cellspacing=0 ";
        sHTML1+="onmouseover='clearTimeout(timeoutID1)' ";
        sHTML1+="onmouseout='clearTimeout(timeoutID1);";
        sHTML1+="timeoutID1=setTimeout(\"popDownMonth()\",100);";
        sHTML1+="event.cancelBubble=true'>\n" + sHTML + "</table>";

        document.getElementById("selectMonth").innerHTML = sHTML1;

        monthConstructed=true;
    }
}

function popUpMonth() {
	constructMonth()
	crossMonthObj.visibility = (dom||ie)? "visible"	: "show"
	crossMonthObj.left = parseInt(crossobj.left) + 50
	crossMonthObj.top =	parseInt(crossobj.top) + 26

	hideElement( 'SELECT', document.getElementById("selectMonth"), stackMonthHid );
	hideElement( 'APPLET', document.getElementById("selectMonth"), stackMonthHid );
}

function popDownMonth()    {
	if( crossMonthObj.visibility != "hidden" ){
    crossMonthObj.visibility= "hidden";
	showElement( stackMonthHid );
	}
}

/*** Year Pulldown ***/

function incYear() {
    for    (i=0; i<7; i++){
        newYear    = (i+nStartingYear)+1
        if (newYear==yearSelected)
        { txtYear =    "&nbsp;<B>"    + newYear +    "</B>&nbsp;"; }
        else
        { txtYear =    "&nbsp;" + newYear + "&nbsp;"; }
        document.getElementById("y"+i).innerHTML = txtYear;
    }
    nStartingYear ++;
    bShow=true;
}

function decYear() {
    for    (i=0; i<7; i++){
        newYear    = (i+nStartingYear)-1
        if (newYear==yearSelected)
        { txtYear =    "&nbsp;<B>"    + newYear +    "</B>&nbsp;" }
        else
        { txtYear =    "&nbsp;" + newYear + "&nbsp;" }
        document.getElementById("y"+i).innerHTML = txtYear;
    }
    nStartingYear --;
    bShow=true;
}

function selectYear(nYear) {
    yearSelected=parseInt(nYear+nStartingYear);
    yearConstructed=false;
    constructCalendar();
    popDownYear();
}

function constructYear() {
    popDownMonth();
    var sHTML =    "";
    var sHTML1 = "";
    if (!yearConstructed) {

        sHTML="<tr><td align='center' ";
        sHTML+="onmouseover='this.style.backgroundColor=\"#BBCEFF\"' ";
        sHTML+="onmouseout='clearInterval(intervalID1);";
        sHTML+="this.style.backgroundColor=\"\"' ";
        sHTML+="style='cursor:pointer' ";
        sHTML+="onmousedown='clearInterval(intervalID1);";
        sHTML+="intervalID1=setInterval(\"decYear()\",30)' ";
        sHTML+="onmouseup='clearInterval(intervalID1)'>-</td></tr>"

        j = 0;
        nStartingYear = yearSelected-3;
        for    (i=(yearSelected-3); i<=(yearSelected+3); i++) {
            sName = i;
            if (i==yearSelected){
                sName =    "<B>" +    sName +    "</B>"
            }

            sHTML+="<tr><td id='y" + j + "' ";
            sHTML+="onmouseover='this.style.backgroundColor=\"#BBCEFF\"' ";
            sHTML+="onmouseout='this.style.backgroundColor=\"\"' ";
            sHTML+="style='cursor:pointer' ";
            sHTML+="onclick='selectYear("+j+");";
            sHTML+="event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"

            j++;
        }

        sHTML+="<tr><td align='center' ";
        sHTML+="onmouseover='this.style.backgroundColor=\"#BBCEFF\"' ";
        sHTML+="onmouseout='clearInterval(intervalID2);";
        sHTML+="this.style.backgroundColor=\"\"' ";
        sHTML+="style='cursor:pointer' ";
        sHTML+="onmousedown='clearInterval(intervalID2);";
        sHTML+="intervalID2=setInterval(\"incYear()\",30)' ";
        sHTML+="onmouseup='clearInterval(intervalID2)'>+</td></tr>"

        sHTML1="<table width=44 style='font-family:arial; ";
        sHTML1+="font-size:11px; border-width:1; border-style:solid; ";
        sHTML1+="border-color:#a0a0a0; cursor: hand;' bgcolor='#FFFFDD' ";
        sHTML1+="onmouseover='clearTimeout(timeoutID2)' ";
        sHTML1+="onmouseout='clearTimeout(timeoutID2);";
        sHTML1+="timeoutID2=setTimeout(\"popDownYear()\",100)' ";
        sHTML1+="cellspacing=0>"    + sHTML    + "</table>";

        document.getElementById("selectYear").innerHTML    = sHTML1;

        yearConstructed    = true;
    }
}

function popDownYear() {
    clearInterval(intervalID1);
    clearTimeout(timeoutID1);
    clearInterval(intervalID2);
    clearTimeout(timeoutID2);
    crossYearObj.visibility= "hidden";
}

function popUpYear() {
	var	leftOffset

	constructYear()
	crossYearObj.visibility	= (dom||ie)? "visible" : "show"
	leftOffset = parseInt(crossobj.left) + document.getElementById("spanYear").offsetLeft
	if (ie)
	{
		leftOffset += 6
	}
	crossYearObj.left =	leftOffset
	crossYearObj.top = parseInt(crossobj.top) +	26
}

/*** calendar ***/
function WeekNbr(n) {
  // Algorithm used:
  // From Klaus Tondering's Calendar document (The Authority/Guru)
  // hhtp://www.tondering.dk/claus/calendar.html
  // a = (14-month) / 12
  // y = year + 4800 - a
  // m = month + 12a - 3
  // J = day + (153m + 2) / 5 + 365y + y / 4 - y / 100 + y / 400 - 32045
  // d4 = (J + 31741 - (J mod 7)) mod 146097 mod 36524 mod 1461
  // L = d4 / 1460
  // d1 = ((d4 - L) mod 365) + L
  // WeekNumber = d1 / 7 + 1

  year = n.getFullYear();
  month = n.getMonth() + 1;
  if (startAt == 0) {
     day = n.getDate() + 1;
  }
  else {
     day = n.getDate();
  }

  a = Math.floor((14-month) / 12);
  y = year + 4800 - a;
  m = month + 12 * a - 3;
  b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
  J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
  d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
  L = Math.floor(d4 / 1460);
  d1 = ((d4 - L) % 365) + L;
  week = Math.floor(d1/7) + 1;

  return week;
}

function constructCalendar () {
    var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31);

    var dateMessage;
    var startDate = new Date (yearSelected,monthSelected,1);
    var endDate;

    if (monthSelected==1)
    {
        endDate = new Date (yearSelected,monthSelected+1,1);
        endDate = new Date (endDate    - (24*60*60*1000));
        numDaysInMonth = endDate.getDate();
    }
    else
    {
        numDaysInMonth = aNumDays[monthSelected];
    }

    datePointer = 0;
    dayPointer = startDate.getDay(); //- startAt;

    if (dayPointer<0)
    {
        dayPointer = 6;
    }
    sHTML = "<table border=0 style='font-family:arial;font-size:11px;'><tr>";

    if (showWeekNumber==1)
    {
        sHTML+="<td width=27><b>" + weekString + "</b></td>";
        sHTML+="<td width=1 rowspan=7 bgcolor='#d0d0d0' ";
        sHTML+="style='padding:0px'><img src='"+imgDir+"divider.gif' width=1></td>";
    }

    for    (i=0; i<7; i++)    {
        sHTML += "<td width='27' align='right'><font color=brown size=2><B>"+ dayName[i]+"</B></font></td>";
    }
    sHTML +="</tr><tr>";

    if (showWeekNumber==1)
    {
        sHTML += "<td align=right>" + WeekNbr(startDate) + "&nbsp;</td>";
    }

    for ( var i=1; i<=dayPointer;i++ )
    {
        sHTML += "<td>&nbsp;</td>";
    }

    for ( datePointer=1; datePointer<=numDaysInMonth; datePointer++ )
    {
        dayPointer++;
        sHTML += "<td align=right>";
        sStyle=styleAnchor;
        if ((datePointer==odateSelected) &&
            (monthSelected==omonthSelected)    &&
            (yearSelected==oyearSelected)) {
                sStyle+=styleLightBorder;
        }

        sHint = "";
        for (k=0;k<HolidaysCounter;k++)
        {
            var bln1=(parseInt(Holidays[k].d)==datePointer)
            var bln2=(parseInt(Holidays[k].m)==(monthSelected+1))
            if (bln1&&bln2)
            {
                var bln3=(parseInt(Holidays[k].y)==0)
                var bln4=(parseInt(Holidays[k].y)==yearSelected)
                var bln5=(parseInt(Holidays[k].y)!=0)
                if (bln3 || (bln4 && bln5))
                {
                    sStyle+="background-color:#FFDDDD;";
                    sHint+=sHint==""?Holidays[k].desc:"\n"+Holidays[k].desc;
                }
            }
        }

        var regexp= /\"/g
        sHint=sHint.replace(regexp,"&quot;");

        var dtmDate = constructDate(datePointer,monthSelected,yearSelected);

        dateMessage="onmousemove='window.status=\"";
        dateMessage+=selectDateMessage.replace("[date]",dtmDate);
        dateMessage+="\"' onmouseout='window.status=\"\"' ";

        if ((datePointer==dateNow)&&(monthSelected==monthNow)&&(yearSelected==yearNow)) {

            sHTML+="<b><a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' ";
            sHTML+="href='javascript:dateSelected="+datePointer+";closeCalendar();'>";
            sHTML+="<font color=#ff0000>&nbsp;" + datePointer + "</font>&nbsp;</a></b>";

        } else if (dayPointer % 7 == (startAt * -1)+1) {

            sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' ";
            sHTML+="href='javascript:dateSelected="+datePointer + ";closeCalendar();'>";
            sHTML+="&nbsp;<font color=#b4b4b4>" + datePointer + "</font>&nbsp;</a>";

        } else if (dayPointer % 7 == (startAt * -1)+2) {

            sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' ";
            sHTML+="href='javascript:dateSelected="+datePointer + ";closeCalendar();'>";
            sHTML+="&nbsp;<font color=#b4b4b4>" + datePointer + "</font>&nbsp;</a>";

        } else {

            sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' ";
            sHTML+="href='javascript:dateSelected="+datePointer + ";closeCalendar();'>";
            sHTML+="&nbsp;" + datePointer + "&nbsp;</a>";

        }

        sHTML += ""
        if ((dayPointer+startAt) % 7 == startAt) {
            sHTML += "</tr><tr>"
            if ((showWeekNumber==1)&&(datePointer<numDaysInMonth))
            {
                sHTML+="<td align=right>";
                sHTML+=(WeekNbr(new Date(yearSelected,monthSelected,datePointer+1)))
                sHTML+="&nbsp;</td>"
            }
        }
    }

    document.getElementById("content").innerHTML = sHTML

    var strSpanMonth="&nbsp;" +    monthName[monthSelected] + "&nbsp;";
    strSpanMonth+="<IMG id='changeMonth' SRC='"+imgDir+"drop1.gif' ";
    strSpanMonth+="WIDTH='12' HEIGHT='10' BORDER=0>";

    document.getElementById("spanMonth").innerHTML = strSpanMonth;

    var strSpanYear="&nbsp;" + yearSelected    + "&nbsp;";
    strSpanYear+="<IMG id='changeYear' SRC='"+imgDir+"drop1.gif' ";
    strSpanYear+="WIDTH='12' HEIGHT='10' BORDER=0>";

    document.getElementById("spanYear").innerHTML =    strSpanYear;
}

function popUpCalendarTR(ctl, ctl2, format) {
    var    leftpos=0;
    var    toppos=0;

    if (bPageLoaded)
    {
        if ( crossobj.visibility == "hidden" ) {
            ctlToPlaceValue = ctl2;
            dateFormat=format;

            formatChar = " ";
            aFormat    = dateFormat.split(formatChar);
            if (aFormat.length<3)
            {
                formatChar = "/";
                aFormat    = dateFormat.split(formatChar);
                if (aFormat.length<3)
                {
                    formatChar = ".";
                    aFormat    = dateFormat.split(formatChar);
                    if (aFormat.length<3)
                    {
                        formatChar = "-";
                        aFormat    = dateFormat.split(formatChar);
                        if (aFormat.length<3)
                        {
                            // invalid date    format
                            formatChar="";
                        }
                    }
                }
            }

            tokensChanged = 0;

            if ( formatChar != "" )
            {
                // use user's date
                aData =    ctl2.value.split(formatChar);

                for    (i=0;i<3;i++)
                {
                    if ((aFormat[i]=="d") || (aFormat[i]=="dd"))
                    {
                        dateSelected = parseInt(aData[i], 10);
                        tokensChanged ++;
                    }
                    else if ((aFormat[i]=="m") || (aFormat[i]=="mm"))
                    {
                        monthSelected = parseInt(aData[i], 10) - 1;
                        tokensChanged ++;
                    }
                    else if (aFormat[i]=="yyyy")
                    {
                        yearSelected = parseInt(aData[i], 10);
                        tokensChanged ++;
                    }
                    else if (aFormat[i]=="mmm")
                    {
                        for (j=0; j<12;    j++)
                        {
                            if (aData[i]==monthName[j])
                            {
                                monthSelected=j;
                                tokensChanged ++;
                            }
                        }
                    }
                }
            }

            if ((tokensChanged!=3)||isNaN(dateSelected)||isNaN(monthSelected)||isNaN(yearSelected))
            {
                dateSelected = dateNow;
                monthSelected = monthNow;
                yearSelected = yearNow;
            }

            odateSelected=dateSelected;
            omonthSelected=monthSelected;
            oyearSelected=yearSelected;

            aTag = ctl;

            do {
                aTag = aTag.offsetParent;
                leftpos += aTag.offsetLeft;
                toppos += aTag.offsetTop;


            } while (aTag.tagName != "BODY" && aTag.offsetParent != null)

            crossobj.left = (fixedX==-1 ? ctl.offsetLeft + leftpos : fixedX)

            crossobj.top = (fixedY==-1 ? ctl.offsetTop + toppos + ctl.offsetHeight + 2 : fixedY)

            constructCalendar(1, monthSelected, yearSelected);

            crossobj.visibility=((dom||ie)? "visible" : "show");

            hideElement( 'SELECT', document.getElementById("calendar"), stackCalHid );
            hideElement( 'APPLET', document.getElementById("calendar"), stackCalHid );

            bShow = true;
        }
        else
        {
            hideCalendar();
            if (ctlNow!=ctl) {popUpCalendarTR(ctl, ctl2, format)};
        }
        ctlNow = ctl;
    }
}

document.onkeypress = function hidecal1 () {
    if (event.keyCode==27)
    {
        hideCalendar();
    }
}
document.onclick = function hidecal2 () {
    if (!bShow)
    {
        hideCalendar();
    }
    bShow = false;
}

init();

